# Create your views here.
# -*- coding: utf-8 -*- 
# vim: set fileencoding=utf-8 :

from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.shortcuts import render_to_response, redirect
from django.contrib.auth import authenticate, login
from django.forms import ModelForm
from django.core.exceptions import ObjectDoesNotExist

from ticket.models import Chamado, Empresa, Usuario, Maquina
from ticket.models import ChamadoForm, EmpresaForm, UsuarioForm, MaquinaForm

from hashlib import md5


class requer_login(object):
    def __init__(self, f):
        self.f = f
    def __call__(self, r, *args, **kwargs):
        if not r.session.get('autorizado', False):
            return redirect('/')
        else:
            return self.f(r, *args, **kwargs)

@requer_login
def logout(request):
    if 'autorizado' in request.session:
        del request.session['autorizado']
    if 'usuario' in request.session:
        del request.session['usuario']
    aviso = 'Muito obrigado por utilizar o sistema.'
    return render_to_response('index.html', locals(), context_instance=RequestContext(request))

@requer_login
def home(request):
    return render_to_response('home.html', locals(), context_instance=RequestContext(request))

def index(request):
    erros = []
    page = 'index.html'
    
    try:
        if request.method == "POST":
            senha = md5(request.POST['password']).hexdigest()
            u = Usuario.objects.get(login=request.POST['username'], senha=senha)
            aviso = 'Acesso Autorizado.'
            if u.id:
                request.session['autorizado'] = True
                request.session['usuario'] = u
                request.session.set_expiry(1600)
                page = 'home.html'
            else:
                erros.append('Acesso Negado!')
    except:
        erros.append('Acesso Negado. Tente Novamente.')
    return render_to_response(page, locals(), context_instance=RequestContext(request))


def usuario(request, id=None):
    form_invalido = False
    try:
        usuario = Usuario.objects.get(pk=id)
    except:
        usuario = None
        
    form = UsuarioForm(request.POST, instance=usuario)

    if request.POST:
        if form.is_valid():
            nome = request.POST['nome']
            login = request.POST['login']
            senha = md5(request.POST['senha']).hexdigest()
            email = request.POST['email']
            if id:
                usuario.nome = nome
                usuario.login = login
                usuario.senha = senha
                usuario.email = email
            else:
                usuario = Usuario(login = login, senha = senha, nome = nome, email = email )                
            usuario.save()            
            aviso = 'Usuário Salvo com Sucesso!'            
            form = UsuarioForm()
        else:
            form_invalido = True
    else:
        form = UsuarioForm(instance=usuario)
        
    return render_to_response('usuario.html', locals(), context_instance=RequestContext(request))

@requer_login
def usuarios(request):
    usuarios = Usuario.objects.all()
    if not usuarios:
        aviso = "Não existem usuários cadastrados!"
    return render_to_response('usuarios.html', locals())

@requer_login
def remover_usuario(request,id=None):
    excluir = True
    try:
        usuario = Usuario.objects.get(pk=id)
        if request.GET.has_key('excluir') and request.GET['excluir'] == 'ok':
            usuario.delete()
            excluir = False
    except:
        erros = [ 'Usuário inválido.' ]
    return render_to_response('remover_usuario.html', locals())

@requer_login
def empresa(request, id=None):
    form_invalido = False
    try:
        empresa = Empresa.objects.get(pk=id)
    except:
        empresa = None
        
    form = EmpresaForm(request.POST, instance=empresa)
    if request.POST:
        if form.is_valid():
            nome = request.POST['nome']
            if id:
                empresa.nome = nome
            else:
                empresa = Empresa(nome = nome)
                
            empresa.save()            
            aviso = 'Empresa Salva com Sucesso!'            
            form = EmpresaForm()
        else:
            form_invalido = True
    else:
        form = EmpresaForm(instance=empresa)
        
    return render_to_response('empresa.html', locals(), context_instance=RequestContext(request))

@requer_login
def empresas(request):
    empresas = Empresa.objects.all()
    if not empresas:
        aviso = "Não existem empresas cadastradas."
    return render_to_response('empresas.html', locals())

@requer_login
def remover_empresa(request, id=None):
    excluir = True
    try:
        empresa = Empresa.objects.get(pk=id)        
        if request.GET.has_key('excluir') and request.GET['excluir'] == 'ok':
            empresa.delete()
            excluir = False
    except:
        erros = [ 'Empresa inválida.' ]
        
    return render_to_response('remover_empresa.html', locals())

@requer_login
def chamado(request, id=None):
    form_invalido = False
    try:
        chamado = Chamado.objects.get(pk=id)
    except:
        chamado = None

    form = ChamadoForm(request.POST, instance=chamado)
    if request.POST:
        if form.is_valid():
            codigo = request.POST['codigo']
            titulo = request.POST['titulo']
            problema = request.POST['problema']
            solucao = request.POST['solucao']
            duracao = request.POST['duracao']
            usuario = Usuario.objects.get(pk=request.POST['usuario'])
            maquina = Maquina.objects.get(pk=request.POST['maquina'])
            if id:
                chamado.codigo = codigo
                chamado.titulo = titulo
                chamado.problema = problema
                chamado.solucao = solucao
                chamado.duracao = duracao
                chamado.usuario = usuario
                chamado.maquina = maquina
            else:
                chamado = Chamado(codigo = codigo, titulo = titulo, problema = problema,
                                  solucao = solucao, duracao = duracao,
                                  usuario = usuario, maquina = maquina)
                
            chamado.save()            
            aviso = 'Chamado Salvo com Sucesso!'            
            form = ChamadoForm()
        else:
            form_invalido = True
    else:
        form = ChamadoForm(instance=chamado)
        
    return render_to_response('chamado.html', locals(), context_instance=RequestContext(request))
    
@requer_login
def chamados(request):
    chamados = Chamado.objects.all()
    if not chamados:
        aviso = "Não existem chamados cadastrados."
    return render_to_response('chamados.html', locals())

@requer_login
def remover_chamado(request, id=None):
    excluir = True
    try:
        chamado = Chamado.objects.get(pk=id)        
        if request.GET.has_key('excluir') and request.GET['excluir'] == 'ok':
            chamado.delete()
            excluir = False
    except:
        erros = [ 'Chamado inválido.' ]
        
    return render_to_response('remover_chamado.html', locals())

@requer_login
def maquina(request, id=None):
    form_invalido = False
    try:
        maquina = Maquina.objects.get(pk=id)
    except:
        maquina = None
        
    form = MaquinaForm(request.POST, instance=maquina)
    if request.POST:
        if form.is_valid():
            nome = request.POST['nome']
            ip = request.POST['ip']
            processador = request.POST['processador']
            memoria = request.POST['memoria']
            sistema_operacional = request.POST['sistema_operacional']
            unidade_medida = request.POST['unidade_medida']
            empresa = Empresa.objects.get(pk=request.POST['empresa'])
            
            if id:
                maquina.nome = nome
                maquina.ip = ip
                maquina.processador = processador
                maquina.memoria = memoria
                maquina.sistema_operacional = sistema_operacional
                maquina.unidade_medida = unidade_medida
                maquina.empresa = empresa
                
            else:
                maquina = Maquina(nome = nome, ip = ip, processador = processador,
                                  memoria = memoria, sistema_operacional = sistema_operacional,
                                  unidade_medida = unidade_medida, empresa = empresa )
                
            maquina.save()            
            aviso = 'Máquina Salva com Sucesso!'            
            form = MaquinaForm()
        else:
            form_invalido = True
    else:
        form = MaquinaForm(instance=maquina)
        
    return render_to_response('maquina.html', locals(), context_instance=RequestContext(request))

@requer_login
def maquinas(request):
    maquinas = Maquina.objects.all()
    if not maquinas:
        aviso = "Não existem máquinas cadastrados."
    return render_to_response('maquinas.html', locals())

@requer_login
def remover_maquina(request, id=None):
    excluir = True
    try:
        maquina = Maquina.objects.get(pk=id)        
        if request.GET.has_key('excluir') and request.GET['excluir'] == 'ok':
            maquina.delete()
            excluir = False
    except:
        erros = [ 'Máquina inválida.' ]
        
    return render_to_response('remover_maquina.html', locals())